/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.documentar.DAO;

import br.com.documentar.interfacee.InterfaceDAO;
import br.com.documentar.model.CategoriaArvoreModel;
import java.sql.SQLException;
import java.util.List;

/**
 *
 * @author Santos
 */
public class CategoriaArvoreDAO extends AbstractDAO implements
        InterfaceDAO<List<br.com.documentar.model.CategoriaArvoreModel>, br.com.documentar.model.CategoriaArvoreModel> {

    @Override
    public boolean setDados(CategoriaArvoreModel model) {
        String sql = null;
        ConnectDataBase();
        if (model.getCodigoPai().getCodigo() == 0) {
            model.getCodigoPai().setActionScript(null);
        } else {
            model.getCodigoPai().setActionScript(String.valueOf(model.getCodigoPai().getCodigo()));
        }
        switch (model.getActionScript()) {

            case "I":
                sql = "INSERT INTO `tcat_categoria` (\n"
                        //+ "   `TCAT_CODIGO_PK`,\n"
                        + "  `TCAT_PRODUTO_FK`,\n"
                        + "  `TCAT_CATEGORIA_PAI_FKN`,\n"
                        + "  `TCAT_NOME`,\n"
                        + "  `TCAT_CODIGO_PROCESSO`,\n"
                        + "  `TCAT_ATIVO`,\n"
                        + "  `TCAT_TEM_FILHO`,"
                        + "  `TCAT_OBJETIVO`,"
                        + "  `TCAT_PERIODICIDADE`,"
                        + "  `TCAT_CONS_NAO_USO`,"
                        + "  `TCAT_LINK_VIDEO`) "
                        + "   VALUE (\n"
                        //+ "  " + model.getCodigo() + ",\n"
                        + "  " + model.getProduto().getCodigo() + ",\n"
                        + "  " + model.getCodigoPai().getActionScript() + ",\n"//adaptação para aceitar nulo
                        + "  '" + model.getNome() + "',\n"
                        + "  " + model.getCodigoProcesso() + ",\n"
                        + "  '" + model.getAtivo() + "',\n"
                        + "  '" + model.getTemFilho() + "', "
                        + "  '" + model.getObjetivo() + "', "
                        + "  '" + model.getPeriodicidade() + "', "
                        + "  '" + model.getConsNaoUso() + "', "
                        + "  '" + model.getLinkVideo() + "')";
                break;
            case "U":
                sql = "UPDATE `tcat_categoria`  \n"
                        + "SET \n"
                        + "  `TCAT_PRODUTO_FK` = " + model.getProduto().getCodigo() + ",\n"
                        + "  `TCAT_CATEGORIA_PAI_FKN` = " + model.getCodigoPai().getActionScript() + ",\n"
                        + "  `TCAT_NOME` = '" + model.getNome() + "',\n"
                        + "  `TCAT_CODIGO_PROCESSO` = " + model.getCodigoProcesso() + ",\n"
                        + "  `TCAT_ATIVO` = '" + model.getAtivo() + "',\n"
                        + "  `TCAT_TEM_FILHO` = '" + model.getTemFilho() + "', \n"
                        + "  `TCAT_OBJETIVO` = '" + model.getObjetivo() + "',\n"
                        + "  `TCAT_PERIODICIDADE` = '" + model.getPeriodicidade() + "',\n"
                        + "  `TCAT_CONS_NAO_USO` = '" + model.getConsNaoUso() + "',\n"
                        + "  `TCAT_LINK_VIDEO` = '" + model.getLinkVideo() + "' "
                        + "WHERE \n"
                        + "  `TCAT_CODIGO_PK` = " + model.getCodigo() + "";
                break;
            case "D":
                sql = "DELETE FROM `tcat_categoria` \n"
                        + "WHERE \n"
                        + "  `TCAT_CODIGO_PK` = " + model.getCodigo() + "";
                break;
        }
        return InsertUpdateDelete(sql, model.getNomeTela());
    }

    @Override
    public List<CategoriaArvoreModel> getDados(CategoriaArvoreModel model) {
        model.setResultSet(null);
        model.getListaArvore().clear();
        String sql = "SELECT\n"
                + "        `categoria`.`TCAT_CODIGO_PK`,\n"
                + "        `categoria`.`TCAT_PRODUTO_FK`,\n"
                + "        `produto`.`TPRO_NOME`,\n"
                + "         COALESCE(`categoria`.`TCAT_CATEGORIA_PAI_FKN`,0) AS TCAT_CATEGORIA_PAI_FKN, \n"
                + "         COALESCE(( `fnc_caminho_sem_item_proprio`(`categoria`.`TCAT_CODIGO_PK`)), 'RAIZ') AS TCAT_NOME_PAI, \n"
                + "        `categoria`.`TCAT_NOME`,\n"
                + "        `categoria`.`TCAT_CODIGO_PROCESSO`,\n"
                + "        `categoria`.`TCAT_ATIVO`,\n"
                + "        `categoria`.`TCAT_TEM_FILHO`, \n"
                + "        `categoria`.`TCAT_OBJETIVO`,\n"
                + "        `categoria`.`TCAT_PERIODICIDADE`,\n"
                + "        `categoria`.`TCAT_CONS_NAO_USO`,\n"
                + "        `categoria`.`TCAT_LINK_VIDEO`, "
                + "         COALESCE(( `fnc_caminho_completo`( `categoria`.`TCAT_CODIGO_PK`)), 'RAIZ') AS CAMINHO_COMPLETO, \n"
                + "         COALESCE(( `fnc_caminho_sem_item_proprio`( `categoria`.`TCAT_CODIGO_PK`)), 'RAIZ') AS CAMINHO_SEM_ITEM_PROPRIO \n"
                + "      FROM \n"
                + "        `tcat_categoria` categoria \n"
                + "      inner join `tpro_produto` produto on `categoria`.`TCAT_PRODUTO_FK` =  `produto`.`TPRO_CODIGO_PK`";
        try {
            ConnectDataBase();
            switch (model.getActionScript()) {
                case "C":
                    model.setResultSet(Select(sql, model.getNomeTela()));
                    break;
                case "P":
                    model.setResultSet(Select(sql + " where `categoria`.`TCAT_NOME` like '%" + model.getNome() + "%'", model.getNomeTela()));
                    break;
                case "porProduto":
                    model.setResultSet(Select(sql + " where `categoria`.`TCAT_PRODUTO_FK` = " + model.getProduto().getCodigo() + "", model.getNomeTela()));
                    break;
                case "porProdutoSemFilho":
                    model.setResultSet(Select(sql + " where `categoria`.`TCAT_PRODUTO_FK` = " + model.getProduto().getCodigo() + ""
                            + " and `categoria`.`TCAT_TEM_FILHO` = 'N'", model.getNomeTela()));
                    break;
                case "porProdutoTemFilho":
                    model.setResultSet(Select(sql + " where `categoria`.`TCAT_PRODUTO_FK` = " + model.getProduto().getCodigo() + ""
                            + " and `categoria`.`TCAT_TEM_FILHO` = 'S'", model.getNomeTela()));
                    break;
                case "porCategoriaVersao":
                    model.setResultSet(Select(sql + " where `produto`.`TPRO_CODIGO_PK` = " + model.getProduto().getCodigo() + "\n"
                            + " and EXISTS (select * from `tlnk_categoria_versao` `categoriaVersao`\n"
                            + " where `categoriaVersao`.`TLNK_CATEGORIA_FK_PK` = `categoria`.`TCAT_CODIGO_PK`)", model.getNomeTela()));
                    break;
                case "porProdutoVersao":
                    model.setResultSet(Select(sql + " where `categoria`.`TCAT_PRODUTO_FK` = " + model.getProduto().getCodigo() + "\n"
                            + " and EXISTS (select * \n"
                            + " from `tlnk_categoria_versao` `categoriaVersao` \n"
                            + " where `categoriaVersao`.`TLNK_VERSAO_FK_PK` = " + model.getVersaoModel().getCodigo() + "\n"
                            + " and `categoriaVersao`.`TLNK_CATEGORIA_FK_PK` = `categoria`.`TCAT_CODIGO_PK`)", model.getNomeTela()));
                    break;
            }
            while (model.getResultSet().next()) {
                br.com.documentar.model.CategoriaArvoreModel p = new br.com.documentar.model.CategoriaArvoreModel();
                p.setCodigo(rs.getInt("TCAT_CODIGO_PK"));
                p.getProduto().setCodigo(rs.getInt("TCAT_PRODUTO_FK"));
                p.getProduto().setNome(rs.getString("TPRO_NOME"));

                p.getCodigoPai().setCodigo(rs.getInt("TCAT_CATEGORIA_PAI_FKN"));
                p.getCodigoPai().setNome(rs.getString("TCAT_NOME_PAI"));

                p.setNome(rs.getString("TCAT_NOME"));
                p.setCodigoProcesso(rs.getString("TCAT_CODIGO_PROCESSO"));
                p.setAtivo(rs.getString("TCAT_ATIVO").charAt(0));
                p.setTemFilho(rs.getString("TCAT_TEM_FILHO").charAt(0));
                p.setObjetivo(rs.getString("TCAT_OBJETIVO"));
                p.setPeriodicidade(rs.getString("TCAT_PERIODICIDADE"));
                p.setConsNaoUso(rs.getString("TCAT_CONS_NAO_USO"));
                p.setLinkVideo(rs.getString("TCAT_LINK_VIDEO"));
                p.setCaminhoCompleto(rs.getString("CAMINHO_COMPLETO"));
                p.setCaminhoSemItemProprio(rs.getString("CAMINHO_SEM_ITEM_PROPRIO"));
                model.getListaArvore().add(p);
            }
        } catch (SQLException ex) {
            ex.getStackTrace();
        } finally {
            Desconectar(model.getNomeTela());
        }

        //testes de ordenação dos dados da arvore
        CategoriaArvoreModel arvoreModel = new CategoriaArvoreModel();
        arvoreModel.getOrdenaArvore(model.getListaArvore());
        if (model.getActionScript().equals("C")) {
            return arvoreModel.getOrdenaArvore(model.getListaArvore());
        } else {
            return model.getListaArvore();
        }
    }

}
